题意$:$给定一张 $n$个点$,m$条边的有重边的图,找到一个生成树,使得每条边的权值$ \times$到根的距离最小
在任意时刻,我们关心的只有我们已经把多少点加进树了,以及树的最大树高是多少。
设$f[S][i]$为当前树已经包含集合$S$中的点,并且树高是$i$。
那么怎么判断$S_{0}$在转移中是否合法呢?我们设$G_{S}$是$S$能拓展到的边的集合,显然$G$数组是可以预处理出来的。
$f[S][i]=min(f[S_0][i-1]+pay)$,其中满足$S_{0}$是$S$的子集,通过$S_{0}$加边一定可以联结成$S$。$pay$是这次加边的花费。
设$ss=S~xor~S_{0}$,即$ss$是在$S$但不在$S_{0}$中的元素。
这里$pay$的计算显然是对于每个$ss$中的元素找$S_{0}$中的元素与它最短一条的边求和后$\times $树高(即$i$)。
1 |
|